package code.whmmm.util.spring.quartz;

import code.whmmm.util.spring.quartz.util.QuartzUtil;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import code.whmmm.util.simple.TimeUtil;

/**
 * <p><b>
 * 带有日志记录的 job 包装类,<br/>
 * 如不需要 ，也可以 实现 {@link QuartzJob} 接口
 * <p><b>
 * 需要自行添加 依赖 <br/>
 * quartz 版本:  2.3.1 ! 注意版本号
 * </b></p>
 * <br/>
 * <p>
 * <p>
 * 需要自行添加 依赖 <br/>
 * <pre>
 * &lt;dependency&gt;
 *     &lt;groupId&gt;org.quartz-scheduler&lt;/groupId&gt;
 *     &lt;artifactId&gt;quartz&lt;/artifactId&gt;
 *     &lt;version&gt;2.3.1&lt;/version&gt;
 * &lt;/dependency&gt;
 * </pre>
 * <p>
 * 创建时间: 8/14/2019 1:12 PM <br/>
 *
 * @author Zero
 * @see AbstractLoggedJobWrapper
 */
@Deprecated
public abstract class QuartzJobWrapper implements QuartzJob {

    /**
     * 日志记录名称
     *
     * @return
     */
    public String getJobLogName() {
        return "默认 quartz 任务 ";
    }

    protected Logger log = LoggerFactory.getLogger(this.getClass());

    /**
     * <b>不要重写此方法!!!!</b>
     *
     * @param context job context
     * @throws JobExecutionException 执行异常
     */
    @Override
    //@Transactional(rollbackFor = Exception.class)
    public void execute(JobExecutionContext context) throws JobExecutionException {
        long l = TimeUtil.getTimestamp();
        log.info(getJobLogName() + QuartzUtil.getStartLog());

        try {
            this.doJob();
            log.info(getJobLogName() + QuartzUtil.getEndLog(l));
        } catch (Exception e) {
            log.error(getJobLogName() + " 执行异常");
            log.error(e.getMessage(), e);
        }

    }

    /**
     * <b>具体执行内容 , 不要覆盖 execute 方法</b>
     * <p>已启用 spring tx 事务，适用于单数据源的情况</p>
     */
    public abstract void doJob();
}
